package com.smm.web.vmc.service;

import com.smm.web.vmc.domain.Pager;
import com.smm.web.vmc.domain.Receipt;
import com.smm.web.vmc.domain.ReceiptClose;
import com.smm.web.vmc.dto.AlamQueryDto;
import com.smm.web.vmc.dto.ReceiptDto;

import java.util.List;

/**
 * Created by zhenghao on 2016/8/31.
 * 仓单业务逻辑处理
 */
public interface ReceiptService {


    /**
     * 获取指定用户的所有仓单列表（Controller 专用）
     * @param userId
     * @return
     */
    List<ReceiptDto> getAllByUser(int userId);

    /**
     * 获取指定用户的所有仓单列表
     * @param userId
     * @return
     */
    List<Receipt> getReceiptsByUser(int userId);


    /**
     * 从所有仓单中统计品类列表
     * @return
     */
    List<String> countBreed();

    /**
     * 按查询条件、用户id 获取仓单列表
     * @param queryDto
     * @param userId
     * @return
     */
    List<Receipt> getReceiptsByQueryAndUser(AlamQueryDto queryDto, int userId);

    /**
     * 获取仓单信息
     * @param repNo
     * @return
     */
    Receipt getOneById(String repNo);

    /**
     * 获取指定仓库下所有仓单列表
     * @param whId
     * @return
     */
    List<Receipt> getAllByWarehouser(int whId);


    /**
     * 获取指定仓库下仓单列表，封装成 dto 对象，提供给前端使用
     * @param whId
     * @return
     */
    List<ReceiptDto> getAllDtoByWarehouser(int whId);

    /**
     * 新增仓单，包含仓单关联摄像头、 仓单关联tag，以及 tag 与摄像头关联关系
     * @param receiptDto
     * @throws Exception
     */
    void add(ReceiptDto receiptDto) throws Exception;

    /**
     * 修改仓单，包含仓单关联摄像头、仓单关联tag，以及tag 与摄像头关联关系
     * @param receiptDto
     * @throws Exception
     */
    void update(ReceiptDto receiptDto) throws Exception;

    /**
     * 删除仓单，删除前检查是否有关联摄像头、关联 tag ，如果有不能删除
     * @param repNo
     * @throws Exception
     */
    void delete(String repNo) throws Exception;

    /**
     * 获取所欲仓单列表
     * @return
     */
    List<Receipt> getAll();


    /**
     * 关闭仓单
     * @param repNo
     * @throws Exception
     */
    void close(String repNo) throws Exception;

    /**
     * 获取所有仓单列表， 分页
     * @param pager
     * @return
     */
    List<ReceiptDto> getAllDto(Pager pager);

    /**
     * 按仓单编号，分页查询
     * @param no
     * @param pager
     * @return
     */
    List<ReceiptDto> searchAllDtoByNo(String no, Pager pager);

    //所有已关闭仓单
    List<ReceiptClose> getAllClosedReceipts();

}
